#pragma once
#include <list>
#include <string>
#ifdef DLL_SAMPLE_EXPORTS
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif
using namespace std;
class Figure
{
    public:
    virtual string figure() = 0;
    virtual list<int> get_list_coordinates() = 0;
    Figure()
    {
    }
    virtual void move(int* tmp_x, int* tmp_y) = 0;
};

class Make_Figure
{
    std::list<Figure*> any_figure;
    public:
    DLL_API void   push_back(Figure* figure);
    DLL_API  void  pop_back(int* number);
    DLL_API void   move_figure(int* find_figure, int* x, int* y);
    DLL_API void   writeFile();
    DLL_API void  load_file(Make_Figure& myfigure);
};
 class DLL_API triangle : public Figure
{
	list<int> x;
	list<int> y;
public:
	void move(int * tmp_x, int * tmp_y);
	triangle(list<int>& set_x, list<int>& set_y);
	string figure();
	list<int> get_list_coordinates();
};

 class DLL_API circle :public Figure
{
	int x_CIRCLE;
	int y_CIRCLE;
	int r_CIRCLE;
public:
	circle(int* set_x, int* set_y, int* set_r);
	void move(int * tmp_x, int * tmp_y);
	list<int> get_list_coordinates();
	string figure();
};
 class DLL_API rectangle :public Figure
{
	list<int> x;
	list<int> y;
public:
	void move(int * tmp_x, int * tmp_y);
	rectangle(list<int>& set_x, list <int>& set_y);
	list<int> get_list_coordinates();
	string figure();
};